﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using CapaPresentacion.Commands;
using CapaPresentacion.Vistas;
using Entidades;
using CapaLogica;
using System.Drawing;
using System.Windows.Input;
using System.Windows;
using System.Windows.Data;
using System.Transactions;
using Microsoft.Reporting.WinForms;
using System.Windows.Forms.Integration;
using System.Windows.Media.Imaging;
using System.IO;


namespace CapaPresentacion.Controles
{
    class ReporteEvaluacionAlumnoViewModel
    {

        public event ReiniciarCU ReiniciarCU;

        private RelayCommand reporteEvaluacionAlumnoCommand;
        private RelayCommand buscarAlumnosCommand;

        ReporteEvaluacionAlumno view;
        Guid idCicloLectivo;
        Guid idSeleccionado;


        public Guid IdCicloLectivo
        {
            get
            {
                return idCicloLectivo;
            }
            set
            {
                idCicloLectivo = value;

            }
        }

        public Guid IdSeleccionado
        {
            get
            {
                return idSeleccionado;
            }
            set
            {
                idSeleccionado = value;

            }
        }

        public List<ViewEntity> ListaCiclosLectivos { get; set; }
        public List<ViewEntity> ListaAlumnos { get; set; }

        public ICommand ReporteEvaluacionAlumnoCommand
        {
            get
            {
                return reporteEvaluacionAlumnoCommand;
            }
        }

        public ICommand BuscarAlumnosCommand
        {
            get
            {
                return buscarAlumnosCommand;
            }
        }

        public ReporteEvaluacionAlumnoViewModel() { }


        public void Inicializar(ReporteEvaluacionAlumno vista)
        {

            ListaCiclosLectivos = new CicloLectivoLogica().ObtenerEntidades();

            if (ListaCiclosLectivos.Count > 0 && ListaCiclosLectivos != null)
            {
                this.view = vista;
                this.reporteEvaluacionAlumnoCommand = new RelayCommand(ReporteEvaluacion);
                this.buscarAlumnosCommand = new RelayCommand(BuscarAlumnos);
            }
            else
            {
                VentanaAviso nueva = new VentanaAviso(true, "Se ha producido un error", "No se han encontrado ciclos lectivos");
                nueva.ShowDialog();
                this.ReiniciarCU(CasosDeUso.NuevoCicloLectivo);

            }


        }



        private void BuscarAlumnos(Object parameter)
        {

            ListaAlumnos = new EvaluarAlumnoLogica().ObtenerAlumnosCicloConEvaluacion(idCicloLectivo);

            if (ListaAlumnos.Count > 0)
            {
                this.view.listaDatos.ItemsSource = ListaAlumnos;
                this.view.lblNoSelected.Visibility = Visibility.Collapsed;
                this.view.spAlumnosEncontrados.Visibility = Visibility.Visible;               

            }
            else
            {

                this.view.lblNoSelected.Visibility = Visibility.Collapsed;
                this.view.spAlumnosEncontrados.Visibility = Visibility.Collapsed;
                VentanaAviso nueva = new VentanaAviso(true, "Se ha producido un error", "No se han encontrado alumnos que tengan cargada una evaluación en el ciclo lectivo seleccionado");
                nueva.ShowDialog();

            }


        }

        private void ReporteEvaluacion(Object parameter)
        {
             if (this.idSeleccionado != Guid.Empty)
             {
                 this.view.lblNoSelected.Visibility = Visibility.Collapsed;

                 InscripcionCicloLectivo inscripcion = new InscripcionAlumnoLogica().ObtenerEntidad(idCicloLectivo, idSeleccionado);

                 EvaluacionAlumno evaluacionAlumno = new EvaluarAlumnoLogica().ObtenerEvaluacionPorInscripcion(inscripcion.IdInscripcionCicloLectivo);

                 if (evaluacionAlumno.Evaluacion.TipoEvaluacion == "1, 2 Años")
                 {

                     InformeEvaluacionAlumno1año informe = new InformeEvaluacionAlumno1año(evaluacionAlumno);                 


                     if (evaluacionAlumno.InscripcionCicloLectivo.Alumno.FotoAlumno != null)
                         informe.Imagen = inscripcion.Alumno.FotoAlumno;
                     else
                     {
                         System.Reflection.Assembly myAssembly = System.Reflection.Assembly.GetExecutingAssembly();
                         Stream myStream = myAssembly.GetManifestResourceStream("CapaPresentacion.Imagenes.SinImagen.bmp");
                         Bitmap imagen = new Bitmap(myStream);

                         informe.Imagen = Utilidades.ImageUtil.Image2Bytes(imagen);

                         this.view.rvEvaluacionAlumno.LocalReport.ReportEmbeddedResource = "CapaPresentacion.Controles.ReporteEvaluacionAlumno1año.rdlc";
                     }


                     InformeEvaluacionAlumno1año[] informeEvaluacion = new InformeEvaluacionAlumno1año[] { informe };

                     this.view.rvEvaluacionAlumno.LocalReport.DataSources.Clear();
                     this.view.rvEvaluacionAlumno.LocalReport.DataSources.Add(new ReportDataSource("DatosEvaluacionAlumno", informeEvaluacion));
                 }
                 else
                 {

                     InformeEvaluacionAlumno3años informe = new InformeEvaluacionAlumno3años(evaluacionAlumno);
                     this.view.rvEvaluacionAlumno.LocalReport.ReportEmbeddedResource = "CapaPresentacion.Controles.ReporteEvaluacionAlumno3años.rdlc";


                     if (evaluacionAlumno.InscripcionCicloLectivo.Alumno.FotoAlumno != null)
                         informe.Imagen = inscripcion.Alumno.FotoAlumno;
                     else
                     {
                         System.Reflection.Assembly myAssembly = System.Reflection.Assembly.GetExecutingAssembly();
                         Stream myStream = myAssembly.GetManifestResourceStream("CapaPresentacion.Imagenes.SinImagen.bmp");
                         Bitmap imagen = new Bitmap(myStream);

                         informe.Imagen = Utilidades.ImageUtil.Image2Bytes(imagen);
                     }


                     InformeEvaluacionAlumno3años[] informeEvaluacion = new InformeEvaluacionAlumno3años[] { informe };

                     this.view.rvEvaluacionAlumno.LocalReport.DataSources.Clear();
                     this.view.rvEvaluacionAlumno.LocalReport.DataSources.Add(new ReportDataSource("DatosEvaluacionAlumno", informeEvaluacion));
                     
                 }

                 this.view.rvEvaluacionAlumno.ProcessingMode = ProcessingMode.Local;                
                 this.view.rvEvaluacionAlumno.LocalReport.EnableExternalImages = true;                 
                 this.view.rvEvaluacionAlumno.ShowBackButton = false;
                 this.view.rvEvaluacionAlumno.ShowRefreshButton = false;

                 this.view.rvEvaluacionAlumno.RefreshReport();

                 this.view.spReporte.Visibility = Visibility.Visible;


             }
             else
             {
                 this.view.lblNoSelected.Visibility = Visibility.Visible;
             }


        }


















    }
}
